<?php

namespace App\Models;

use Illuminate\Http\Request;

class Node extends Model
{
	private static $_obj;

	public static function getInstance()
	{
		if (!self::$_obj instanceof self) {
			self::$_obj = new self;
		}
		return self::$_obj;
	}

	/**
	 * 关联到模型的数据表
	 * 默认规则是模型类名的复数作为与其对应的表名
	 * @var  string
	 * @author  朱旭 
	 */
	protected $table = 'node';

	/**
	 * 设置主键
	 * @author  朱旭
	 * @var string
	 */
	public $primaryKey = 'id';

	/**
	 * 表名模型是否应该被打上时间戳
	 * @var  bool
	 * @author 朱旭
	 */
	public $timestamps = false;

	/**
	 * 模型日期列的存储格式
	 * @author  朱旭
	 * @var  string
	 */
	// protected $dateFormat = 'U';
	
	/**
	 * 避免转换时间戳为时间字符串
	 * @param  dateTime $value int
	 * @return dateTime     int
	 */
	public function fromDateTime($value){
		return strtotime(parent::fromDateTime($value));
	}

	//自定义用于存储时间戳的字段名称,可以在模型中设置CREATED_AT 和 UPDATED_AT 常量
	//const CREATED_AT = 'regtime';
	//const UPDATED_AT = '';
	
	/**
	 * 从数据库获取的时间为时间戳格式
	 * @return string
	 */
	public function getDateFormat()
	{
		return 'U';
	}

	/**
	 * 批量赋值黑名单
	 * @var array
	 */
	protected $guarded = [];
	
	/**
	 * 批量赋值白名单
	 * @var array
	 */
	protected $fillable = [];

	/**
	 * 节点/权限数据库添加操作
	 */
	public function addToPower(Request $data)
	{
		$this->name = $data->name;
		$this->mname = $data->mname;
		$this->aname = $data->aname;
		$this->status = $data->status;
		$this->create_time = time();
		$result = $this->save();
		return $result;
	}

	/**
	 * 节点/权限数据库编辑操作
	 */
	public function editPower(Request $data, $id)
	{
		$node = self::find($id);
		$node->name = $data->name;
		$node->mname = $data->mname;
		$node->aname = $data->aname;
		$node->status = $data->status;
		$node->update_time = time();
		$result = $node->update();
		return $result;
	}

	/**
	 * 节点/权限数据库删除操作
	 */
	public function delPower($id)
	{
		$res = self::find($id);
		if (empty($res)) {
			return false;
		}
		$result = $res->delete();
		return $result;
	}

	/**
	 * 节点/权限状态数据库编辑操作
	 */
	public function statusPower($id)
	{
		$res = self::find($id);
		if (empty($res)) {
			return false;
		}
		$res->status = $res->status==1?2:1;
		$result = $res->update();
		return $result;
	}

	/**
	 * 权限节点统计
	 */
	public function countNode()
	{
		$res = self::count();
		return $res;
	}

	/**
	 * 权限/节点单个查询
	 */
	public function showNode($id)
	{
		$res = self::find($id);
		return $res->toArray();
	}

	/**
	 * 权限节点分组获取控制器名
	 */
	public function getControllerNameByGroup()
	{
		$res = self::select('mname')
			->where("status",1)
			->groupBy('mname')
			->get();
		$list = [];
		foreach ($res as $key => $val) {
			$list[] = $val->mname;
		}

		return $list;
	}

	/**
	 * 通过控制器获取控制器下的方法名
	 */
	public function getGroupByActionNameByControllerName(array $node=[])
	{
		$aname = [];
		foreach ($node as $key => $val) {
			$res = self::select('id','name','mname','aname')
				->where([['status',1],['mname',$val]])
				->get();
			foreach ($res as $k => $v) {
				$aname[$val][] = $v->toArray();
			}
		}
// dd($aname);
		return $aname;
	}
}